package com.gxa.config;

import io.swagger.annotations.ApiOperation;
import org.springframework.context.annotation.Bean;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.ApiSelectorBuilder;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;
import java.util.List;

//@Configuration
@EnableSwagger2
public class SwaggerConfig {

//    @Bean
//    public Docket api() {
//        return new Docket(DocumentationType.SWAGGER_2)
//                .groupName("webapi")
//                .apiInfo(apiInfo())
//                .enable(true)
//                .select()
//                .apis(RequestHandlerSelectors.basePackage("com.gxa.controller"))
//                .build();
//    }

    @Bean
    public Docket docket(){
        // 添加请求参数，我们这里把token作为请求头部参数传入后端
        ParameterBuilder parameterBuilder = new ParameterBuilder();
        List<Parameter> parameters = new ArrayList<Parameter>();
        parameterBuilder.name("Authorization").description("令牌").modelRef(new ModelRef("string")).parameterType("header").required(false).build();
        parameters.add(parameterBuilder.build());
        Docket docket = new Docket(DocumentationType.SWAGGER_2);
        //API文档的访问路径
        docket.pathMapping("/");
        docket.enable(true);
        ApiSelectorBuilder selectorBuilder = docket.select();
        //API文档主要是根据哪一个包下面的信息生成
        selectorBuilder.apis(RequestHandlerSelectors.basePackage("com.gxa.controller"));
        selectorBuilder.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class));// 只监控有ApiOperation注解的接口

        //API生成的方式是任意路径都生成
        selectorBuilder.paths(PathSelectors.any());
        docket = selectorBuilder.build();
        //文档信息构建
        ApiInfoBuilder infoBuilder = new ApiInfoBuilder();
        //文档标题
        infoBuilder.title("在线PI文档");
        //文档描述
        infoBuilder.description("前后端分离接口对接帮助文档");
        //文档版本
        infoBuilder.version("1.0");
        docket.apiInfo(infoBuilder.build()).globalOperationParameters(parameters);
        return docket;
    }

//    private ApiInfo apiInfo() {
//        return new ApiInfoBuilder()
//                .title("XXX项目接口文档")
//                .description("XXX项目接口测试")
//                .version("1.0.0")
//                .contact(new Contact("作者名字", "https://www.baidu.com", "邮箱"))
//                .termsOfServiceUrl("")
//                .license("")
//                .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0")
//                .build();
//    }
//    @Bean
//    public Docket api1() {
//        return new Docket(DocumentationType.SWAGGER_2)
//                .groupName("hello")
//                .apiInfo(apiInfo1())
//                .enable(true)
//                .select()
//                .apis(RequestHandlerSelectors.basePackage("com.gxa.controller"))
//                .paths(PathSelectors.ant("/emp/**"))
//                .build();
//    }
//
//    private ApiInfo apiInfo1() {
//        return new ApiInfoBuilder()
//                .title("yyyyy项目接口文档")
//                .description("XXX项目接口测试")
//                .version("1.0.0")
//                .contact(new Contact("作者名字", "https://www.baidu.com", "邮箱"))
//                .termsOfServiceUrl("")
//                .license("")
//                .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0")
//                .build();
//    }

}
